﻿using Business_Layer;
using Data_Access_Layer;
using log4net;
using log4net.Config;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CaffeBillard
{
	public partial class FormOrderDetail : DevComponents.DotNetBar.Office2007Form
	{
		protected static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
	    private int id;
	    private int supid;
	   
		public FormOrderDetail(int id, int sup)
		{
			InitializeComponent();
		    this.id = id;
		    this.supid = sup;
			dgvDetail.AutoGenerateColumns = false;
		}

		private OrderDetailController _detail;
		private OrderController _order;
	    private bool _curr = false;
	    private bool _selectall;
        private int quan;

		private void FormAddOrder_Load(object sender, EventArgs e)
		{
		    this.BackColor = Color.FromArgb(194, 217, 247);
			_detail= new OrderDetailController();
			_order= new OrderController();
			art.DataSource = Article.Objects.Where(x=>x.SupId==supid).ToList();
			art.DisplayMember = "ArtName";
			art.ValueMember = "Id";
		    this.Text = "Danh sách hóa đơn của hóa đơn mã " + id;
			Load_Data();
		}

		//Load
		private void Load_Data()
		{
			dgvDetail.DataSource = new BindingSource {DataSource = _detail.GetAll(id)};

		}

		
		//Xóa những dòng được chọn
		private void btnXoa_Click(object sender, EventArgs e)
		{
            if(MessageBox.Show("Bạn có chắc muốn xóa không?","Thông báo",MessageBoxButtons.YesNo,MessageBoxIcon.Question) ==DialogResult.Yes)
            {
                XmlConfigurator.Configure();
                log.Info("Nhan vien: Xoa chi tiet hoa don");
                //Lấy những dòng được chọn
                var selectedRows = dgvDetail.Rows.Cast<DataGridViewRow>()
                        .Where(x => x.Cells[0].Value != null && x.Cells[1].Value != null && (bool)x.Cells[0].Value)
                        .ToList();
                if(selectedRows.Count ==0)//Chưa chọn dòng nào để xóa
                {
                    MessageBox.Show("Bạn chưa chọn để xóa?", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                else
                {
                    for (int i = 0; i < selectedRows.Count; i++)
                    {
                        var o = selectedRows[i].DataBoundItem as OrderDetail;
                        o.Id = int.Parse(selectedRows[i].Cells[1].Value.ToString());
                        o.Deleted = true;
                        _detail.Delete(o);
                    }
                    TongTien();
                }
                Load_Data();
            }
		}

		//Thoát
		private void btnCancel_Click(object sender, EventArgs e)
		{
			this.Close();
		}

		private void dgvDetail_RowValidated(object sender, DataGridViewCellEventArgs e)
		{
			if (_curr)
			{
				try
				{
					XmlConfigurator.Configure();
					log.Info("Nhan vien: Them moi chi tiet hoa don");
					var d = dgvDetail.Rows[e.RowIndex];
					OrderDetail _order = new OrderDetail();
					_order.Id = int.Parse(d.Cells[1].Value.ToString());
					//_order.OrderId = int.Parse(d.Cells[2].Value.ToString());
					_order.OrderId = id;
					_order.ArtId = int.Parse(d.Cells[3].Value.ToString());
					_order.Quantity = int.Parse(d.Cells[4].Value.ToString());
					_order.Price = float.Parse(d.Cells[5].Value.ToString());
					_order.Deleted = false;
				
					if (_detail.InsertOrUpdate(_order))
					{
						TongTien();
						MessageBox.Show("Cập nhật  thành công!!!", "Thông báo", MessageBoxButtons.OK,
										MessageBoxIcon.Information);
						Load_Data();
					    dgvDetail.CancelEdit();
                        UpdateArt(_order.ArtId, _order.Quantity-quan);
					}
					else
					{
						MessageBox.Show("Không cập nhật được!!!" + _detail._err, "Thông báo", MessageBoxButtons.OK,
										MessageBoxIcon.Information);
					}
				}
				catch (Exception ex)
				{
					MessageBox.Show("Lỗi : \n" + ex.Message);
				}
			}
			_curr = false;
		}


        //Cập nhật lại số lượng khi thêm hoặc cập nhật chi tiết hóa đơn
        private void UpdateArt(int id, int quantity)
        {
            try
            {
                var a = Article.Objects.Where(x => x.Id == id).ToList();
                Article art = new Article();
                art.Id = id;
                art.ArtName = a[0].ArtName;
                art.Price = a[0].Price;
                art.Unit = a[0].Unit;
                art.SupId = a[0].SupId;
                art.Quantity = a[0].Quantity + quantity;
                art.Deleted = false;
                Article.Objects.Update(art);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi :\n" + ex.Message);
            }
        }


		private void dgvDetail_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
		{
			try
			{
				if (dgvDetail.IsCurrentRowDirty && e.ColumnIndex > 0)
				{
					var _d = dgvDetail.Rows[e.RowIndex];
					int n = 0;
					if (_d.Cells[3].Value == null || _d.Cells[4].Value == null )
					{
						MessageBox.Show("Không được để trống dữ liệu!", "Thông báo", MessageBoxButtons.OK,
										MessageBoxIcon.Warning);
						e.Cancel = true;
					}
					else if(_d.Cells[3].Value!=null)
					{
						var result =
						Article.Objects.Where(x => x.Id == int.Parse(_d.Cells[3].Value.ToString())).Select(x => x.Price).ToList();
						_d.Cells[5].Value = result[0].ToString();
                        
					}
                    else if (!int.TryParse(_d.Cells[4].Value.ToString(), out n))
                    {
                        MessageBox.Show("Số lượng phải là một số nguyên!", "Thông báo", MessageBoxButtons.OK,
                                        MessageBoxIcon.Warning);
                        e.Cancel = true;
                    }
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Lỗi hệ thống: \n" + ex.Message);
			}
			_curr = dgvDetail.IsCurrentRowDirty;
		}


		//Cập nhật tổng tiền cho hóa đơn
		private void TongTien()
		{
			var result = Order.Objects.Where(x=>x.Id==id).ToList();
		    var detail = _detail.GetAll(id);
		    float tong = 0;
            if(detail.Count >0)
            {
                for (int i = 0; i < detail.Count; i++)
                {
                    tong += detail[i].Price*detail[i].Quantity;
                }

                Order o = new Order();
                o.Id = id;
                o.EmpId = result[0].EmpId;
                o.SupId = result[0].SupId;
                o.Total = tong;
                o.Type = result[0].Type;
                o.OrderDate = result[0].OrderDate;
                _order.InsertOrUpdate(o);
            }
			
		}

       //Bắt sự kiện để chọn tất cả hoặc bỏ chọn tất cả
        private void dgvDetail_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            quan = int.Parse(dgvDetail.CurrentRow.Cells[4].Value.ToString());
            if(e.RowIndex ==-1)//Chọn dòng tiêu đề
            {

                if (_selectall)
                {
                    for (int i = 0; i < dgvDetail.Rows.Count; i++)
                    {
                        dgvDetail.Rows[i].Cells[0].Value = false;
                        _selectall = false;
                    }
                }
                else
                {
                    for (int i = 0; i < dgvDetail.Rows.Count; i++)
                    {
                        dgvDetail.Rows[i].Cells[0].Value = true;
                        _selectall = true;
                    }
                }
            }
        }
	}
}
